package com.itheima.tilas.mapper;

import com.itheima.tilas.dto.SelectStudentByIdDTO;
import com.itheima.tilas.dto.SelectStudentCountClazzNumDTO;
import com.itheima.tilas.dto.SelectStudentCountDegree;
import com.itheima.tilas.dto.SelectStudentPageDTO;
import com.itheima.tilas.po.InsertStudentParam;
import com.itheima.tilas.po.SelectStudentPageParam;
import com.itheima.tilas.po.UpdateStudentByIdParam;
import com.itheima.tilas.po.UpdateStudentPunishByIdParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学生映射
 *
 * @author 132
 */
@Mapper
public interface StudentMapper {
    /**
     * 分页查询学生信息
     *
     * @param param 存储查询学生信息的条件
     * @return 返回查询到的学生信息列表
     */
    List<SelectStudentPageDTO> selectStudentPage(@Param("p") SelectStudentPageParam param);

    /**
     * 插入一条学生信息
     *
     * @param param 存储学生信息的变量
     * @return 返回影响数据库数据的条数
     */
    int insertStudentOne(@Param("p") InsertStudentParam param);

    /**
     * 批量删除学生信息
     *
     * @param ids 存储要删除的学生id集合
     * @return 返回影响数据库数据的条数
     */
    int batchDeleteStudentByIds(@Param("ids") List<Integer> ids);

    /**
     * 根据id查询学生信息
     * @param id 存储要查询的id
     * @return 返回查询到的信息
     */
    SelectStudentByIdDTO selectStudentById(@Param("id") Integer id);

    /**
     * 根据id修改学生信息
     * @param param 存储学生信息的类
     * @return 返回影响学生信息的条数
     */
    int updateStudentById(@Param("p") UpdateStudentByIdParam param);

    /**
     * 学生违纪处理
     * @param param 存储学生违纪信息的变量
     * @return 返回影响学生数据的条数
     */
    int updateStudentPunishById(@Param("p")UpdateStudentPunishByIdParam param);

    /**
     * 统计学生学历信息
     * @return 返回学生学历集合
     */
    List<SelectStudentCountDegree> selectStudentCountDegree();

    /**
     * 统计每个班级的学生
     * @return 返回班级人数信息集合
     */
    List<SelectStudentCountClazzNumDTO> selectStudentCountClazz();
}
